package ansi.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;
import ansi.exception.DAOExcepcion;
import ansi.exception.LoginExcepcion;
import ansi.modelo.Usuario;
import ansi.util.ConexionBD;

public class UsuarioDAO extends BaseDAO {

	// public Usuario obtenerPorIdUsuario(String idUsuario) throws DAOExcepcion
	// {
	// String query =
	// "select id_usuario,clave,nombres,paterno,materno,correo,direccion,telefono,estado "
	// + " from usuario where id_usuario=?";
	// Usuario vo = new Usuario();
	// Connection con = null;
	// PreparedStatement stmt = null;
	// ResultSet rs = null;
	// try {
	// con = ConexionBD.obtenerConexion();
	// stmt = con.prepareStatement(query);
	// stmt.setString(1, idUsuario);
	// rs = stmt.executeQuery();
	// if (rs.next()) {
	// vo.setIdUsuario(rs.getString("id_usuario"));
	// vo.setClave(rs.getString("clave"));
	// vo.setNombres(rs.getString("nombres"));
	// vo.setPaterno(rs.getString("paterno"));
	// vo.setMaterno(rs.getString("materno"));
	// vo.setCorreo(rs.getString("correo"));
	// vo.setDireccion(rs.getString("direccion"));
	// vo.setTelefono(rs.getString("telefono"));
	// vo.setEstado(rs.getString("estado"));
	// }
	//
	// } catch (SQLException e) {
	// System.err.println(e.getMessage());
	// throw new DAOExcepcion(e.getMessage());
	// } finally {
	// this.cerrarResultSet(rs);
	// this.cerrarStatement(stmt);
	// this.cerrarConexion(con);
	// }
	// return vo;
	// }
	//
	// public Collection<Usuario> buscarPorNombre(String nombre)
	// throws DAOExcepcion {
	// String query =
	// "select id_usuario,clave,nombres,paterno,materno,correo,direccion,telefono,estado "
	// + " from usuario where nombres like ?";
	// Collection<Usuario> c = new ArrayList<Usuario>();
	// Connection con = null;
	// PreparedStatement stmt = null;
	// ResultSet rs = null;
	// try {
	// con = ConexionBD.obtenerConexion();
	// stmt = con.prepareStatement(query);
	// stmt.setString(1, "%" + nombre + "%");
	// rs = stmt.executeQuery();
	// while (rs.next()) {
	// Usuario vo = new Usuario();
	// vo.setIdUsuario(rs.getString("id_usuario"));
	// vo.setClave(rs.getString("clave"));
	// vo.setNombres(rs.getString("nombres"));
	// vo.setPaterno(rs.getString("paterno"));
	// vo.setMaterno(rs.getString("materno"));
	// vo.setCorreo(rs.getString("correo"));
	// vo.setDireccion(rs.getString("direccion"));
	// vo.setTelefono(rs.getString("telefono"));
	// vo.setEstado(rs.getString("estado"));
	// c.add(vo);
	// }
	// } catch (SQLException e) {
	// System.err.println(e.getMessage());
	// throw new DAOExcepcion(e.getMessage());
	// } finally {
	// this.cerrarResultSet(rs);
	// this.cerrarStatement(stmt);
	// this.cerrarConexion(con);
	// }
	// return c;
	// }
	//
	// public Usuario insertar(Usuario vo) throws DAOExcepcion {
	// String query =
	// "INSERT INTO usuario (id_usuario,clave,nombres,paterno,materno,correo,direccion, telefono,estado) "
	// + "VALUES (?,?,?,?,?,?,?,?,?)";
	// System.err.println(query);
	// Connection con = null;
	// PreparedStatement stmt = null;
	// try {
	// con = ConexionBD.obtenerConexion();
	// stmt = con.prepareStatement(query);
	// stmt.setString(1, vo.getIdUsuario());
	// stmt.setString(2, vo.getClave());
	// stmt.setString(3, vo.getNombres());
	// stmt.setString(4, vo.getPaterno());
	// stmt.setString(5, vo.getMaterno());
	// stmt.setString(6, vo.getCorreo());
	// stmt.setString(7, vo.getDireccion());
	// stmt.setString(8, vo.getTelefono());
	// stmt.setString(9, vo.getEstado());
	//
	// int i = stmt.executeUpdate();
	// if (i != 1) {
	// throw new SQLException("No se pudo insertar");
	// }
	// } catch (SQLException e) {
	// System.err.println(e.getMessage());
	// throw new DAOExcepcion(e.getMessage());
	// } finally {
	// this.cerrarStatement(stmt);
	// this.cerrarConexion(con);
	// }
	// return vo;
	// }
	//
	// public Usuario actualizar(Usuario vo) throws DAOExcepcion {
	// String query =
	// "UPDATE usuario SET clave=?, nombres=?, paterno=?, materno=?, correo=?, direccion=?,"
	// + " telefono=?, estado=? WHERE id_usuario=?";
	// Connection con = null;
	// PreparedStatement stmt = null;
	// try {
	// con = ConexionBD.obtenerConexion();
	// stmt = con.prepareStatement(query);
	// stmt.setString(1, vo.getClave());
	// stmt.setString(2, vo.getNombres());
	// stmt.setString(3, vo.getPaterno());
	// stmt.setString(4, vo.getMaterno());
	// stmt.setString(5, vo.getCorreo());
	// stmt.setString(6, vo.getDireccion());
	// stmt.setString(7, vo.getTelefono());
	// stmt.setString(8, vo.getEstado());
	// stmt.setString(9, vo.getIdUsuario());
	//
	// int i = stmt.executeUpdate();
	// if (i != 1) {
	// throw new SQLException("No se pudo actualizar");
	// }
	// } catch (SQLException e) {
	// System.err.println(e.getMessage());
	// throw new DAOExcepcion(e.getMessage());
	// } finally {
	// this.cerrarStatement(stmt);
	// this.cerrarConexion(con);
	// }
	// return vo;
	// }
	//
	// public void eliminar(String idUsuario) throws DAOExcepcion {
	// String query = "DELETE FROM usuario WHERE id_usuario=?";
	// Connection con = null;
	// PreparedStatement stmt = null;
	// try {
	// con = ConexionBD.obtenerConexion();
	// stmt = con.prepareStatement(query);
	// stmt.setString(1, idUsuario);
	// int i = stmt.executeUpdate();
	// if (i != 1) {
	// throw new SQLException("No se pudo eliminar");
	// }
	// } catch (SQLException e) {
	// System.err.println(e.getMessage());
	// throw new DAOExcepcion(e.getMessage());
	// } finally {
	// this.cerrarStatement(stmt);
	// this.cerrarConexion(con);
	// }
	// }

	// public Collection<Usuario> listarTodos() throws DAOExcepcion {
	// String query =
	// "select id_usuario,clave,nombres,paterno,materno,correo,direccion,telefono,estado"
	// + " from usuario";
	// Collection<Usuario> c = new ArrayList<Usuario>();
	// Connection con = null;
	// PreparedStatement stmt = null;
	// ResultSet rs = null;
	// try {
	// con = ConexionBD.obtenerConexion();
	// stmt = con.prepareStatement(query);
	// rs = stmt.executeQuery();
	// while (rs.next()) {
	// Usuario vo = new Usuario();
	// vo.setIdUsuario(rs.getString("id_usuario"));
	// vo.setClave(rs.getString("clave"));
	// vo.setNombres(rs.getString("nombres"));
	// vo.setPaterno(rs.getString("paterno"));
	// vo.setMaterno(rs.getString("materno"));
	// vo.setCorreo(rs.getString("correo"));
	// vo.setDireccion(rs.getString("direccion"));
	// vo.setTelefono(rs.getString("telefono"));
	// vo.setEstado(rs.getString("estado"));
	// c.add(vo);
	// }
	// } catch (SQLException e) {
	// System.err.println(e.getMessage());
	// throw new DAOExcepcion(e.getMessage());
	// } finally {
	// this.cerrarResultSet(rs);
	// this.cerrarStatement(stmt);
	// this.cerrarConexion(con);
	// }
	// return c;
	// }

	public Usuario validar(String Nombre_Usuario, String clave) throws DAOExcepcion, LoginExcepcion {
//		select 
//		 idUsuario, Nombre_Usuario, Password,
//		 Email_Usuario, Rol_idRol
//		FROM usuario
		StringBuffer sql	= new StringBuffer();
		sql.append("select u.idUsuario, u.Nombre_Usuario, u.Password, u.Email_Usuario, u.Rol_idRol, u.Residente_DNI_Residente, ");
		sql.append("(select r.Descripcion from Rol r where r.idRol = u.Rol_idRol) AS Rol_Descripcion, ");
		sql.append("(select r.Nombre_Residente from Residente r where r.DNI_Residente = u.Residente_DNI_Residente) AS Nombre_Residente ");
		sql.append("from usuario u ");
		sql.append("where u.Nombre_Usuario = ? and u.Password = ? ");
		Connection con	= null;
		PreparedStatement stmt = null;
		ResultSet rs	= null;
		Usuario vo		= null;
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(sql.toString());
			stmt.setString(1, Nombre_Usuario);
			stmt.setString(2, clave);
			rs = stmt.executeQuery();
			if (rs.next()) {
				vo		= new Usuario();
				vo.setIdUsuario(rs.getInt("idUsuario"));
				vo.setNombre_Usuario(rs.getString("Nombre_Usuario"));
				vo.setPassword(rs.getString("Password"));
				vo.setEmail_Usuario(rs.getString("Email_Usuario"));
				vo.setRol_idRol(rs.getInt("Rol_idRol"));
				vo.setRol_DescripcionRol(rs.getString("Rol_Descripcion"));
				vo.setResidente_DNI_Residente(rs.getString("Residente_DNI_Residente"));
				vo.setNombre_Residente(rs.getString("Nombre_Residente"));
			} else {
				throw new LoginExcepcion("No existe");
			}
		} catch (LoginExcepcion e) {
			System.err.println(e.getMessage());
			throw new LoginExcepcion(e.getMessage());
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		return vo;
	}

}
